
// 筛选功能


// 这个是例子中的被筛选数组
/* var aim = [{
    name: 'Anne',
    age: 23,
    gender: 'female'
}, {
    name: 'Leila',
    age: 16,
    gender: 'female'
}, {
    name: 'Jay',
    age: 19,
    gender: 'male'
}, {
    name: 'Mark',
    age: 40,
    gender: 'male'
}] */

const ApiSelect = {
    // 1,根据单个名字筛选
    filterByName(aim, name) {
        return aim.filter(item => item.name == name)
    },
    // console.log(filterByName2(aim, "Leila"));

    // 2,多个名字
    filterByName1(aim, nameArr) {
        let result = [];
        for (let i = 0; i < nameArr.length; i++) {
            result.push(aim.find(item => item.name = nameArr[i]))
        }
        return result;
    },
    // console.log(filterByName2(aim, ["Leila","Mark"]));

    // 3,根据多个字段筛选
    filterByName2(aim, name, age) {
        return aim.filter(item => item.name == name || item.age == age)
    },
    // 输入 aim 'Leila' 期望输出为 [{name:'Leila', age: 16, gender:'female'}]
    // console.log(filterByName2(aim, "Leila", 19));

    // 4,
    //根据名字和年龄多元素筛选
    multiFilter(array, filters) {
        const filterKeys = Object.keys(filters)
        // 过滤所有通过条件的元素
        return array.filter((item) => {
            // 动态验证所有过滤条件
            return filterKeys.every( key => {
                //当过滤器为空时忽略安妮
                if(!filters[key].length) return true
                return !!~filters[key].indexOf(item[key])
            })
        })
    },

    filters : {
        name:['Leila', 'Jay'],
        age:[]
    },
    /*
    * 这段代码并非我原创，感兴趣的可以去原作者那里点个赞
    * 作者是：@author https://gist.github.com/jherax
    * 这段代码里我只加了一行，解决部分筛选条件清空时候整体筛选失效的问题
    */

    
    /* 结果：
    * [{name: "Leila", age: 16, gender: "female"},
    *  {name: "Jay", age: 19, gender: "male"}]
    */
}

export default ApiSelect;

